/*!
 * \file frvar_field.h
 *
 * \brief 可变字段操作
 *
 * All Rights Reserved Copyright (C) 2014 broada,Co.,Ltd.\n
 * 相关接口，实现可变字段的操作
 *
 * \version 2.0
 * \author yaohl
 * \date 2015/07/29
 *
 */

#ifndef __FRVAR_FIELD_H_
#define __FRVAR_FIELD_H_

#include "frcomm.h"

/*!
 * 释放Frvar_field
 *
 * \param pp_varfiled  (Frvar_field **)
 *
 */
void frvarfield_free(Frvar_field **pp_varfiled);

/*!
 * 生成Frvar_field
 *
 * \param p_key    (const char *)
 * \param p_value  (const char *)
 *
 * \return Frvar_field *,失败返回NULL
 *
 */
Frvar_field *frvarfield_str(const char *p_key, const char *p_value);

/*!
 * 生成Frvar_field
 *
 * \param p_key    (char *, 成功:函数内部直接使用该内存)
 * \param p_value  (const char *)
 * \param s_flag_trunc (数据是否截断 FR_NO(0):无;FR_YES(1):有)
 *
 * \return Frvar_field *,失败返回NULL
 *
 */
Frvar_field *frvarfield_str2(char *p_key, const char *p_value, short s_flag_trunc);

/*!
 * 生成Frvar_field
 *
 * \param p_key    (char *, 成功:函数内部直接使用该内存)
 * \param l_value  (long)
 *
 * \return Frvar_field *,失败返回NULL
 *
 */
Frvar_field *frvarfield_long2(char *p_key, long l_value);

/*!
 * 生成Frvar_field
 *
 * \param p_key    (char *, 成功:函数内部直接使用该内存)
 * \param d_value  (double)
 *
 * \return Frvar_field *,失败返回NULL
 *
 */
Frvar_field *frvarfield_double2(char *p_key, double d_value);

/*!
 * 生成Frvar_field
 *
 * \param p_key    (const char *)
 * \param p_value  (const char *)
 * \param ui_len   (p_value数据长度)
 * \param s_flag_trunc (数据是否截断 FR_NO(0):无;FR_YES(1):有)
 *
 * \return Frvar_field *,失败返回NULL
 *
 * \note 如果p_value为NULL,则不保存该数据
 *
 */
Frvar_field *frvarfield_bin(const char *p_key, const char *p_value, unsigned int ui_len, short s_flag_trunc);

/*!
 * 克隆Frvar_field
 *
 * \param p_varfield       (Frvar_field *)
 *
 * \return Frvar_field *,失败返回NULL
 *
 */
Frvar_field *frvarfield_clone(Frvar_field *p_varfield);

#endif
